package ncme.auto.framework.core.utils;

import org.apache.commons.codec.digest.DigestUtils;

import java.util.ArrayList;
import java.util.List;

public class ServiceUtil {

    /**
     * 将List按page和pageSize进行分页返回
     * @param <T> 业务类型
     * @param list 待分页的集合
     * @param page 页码
     * @param size 每页数量
     * @return 分页结果
     */
    public static <T> List<T> pageList(List<T> list, Integer page, Integer size) {
        if (size < 1 || page < 0 || list.size() == 0)
            return new ArrayList<>();
        double ceil = Math.ceil((float) list.size() / size);
        int pages = Integer.parseInt(String.valueOf(ceil).split("\\.")[0]);
        if (page >= pages) return new ArrayList<>();
        List<T> resList = new ArrayList<>();
        for (int i = page * size; i < list.size() && i < (page + 1) * size; i++) {
            resList.add(list.get(i));
        }
        return resList;
    }

    /**
     * List集合差，返回集合A-集合B，即集合A中含有的而集合B不含有的
     * @param <T> 业务类型
     * @param target 目标集合
     * @param tool 工具集合
     * @return 集合差结果
     */
    public static <T> List<T> listSubtraction(List<T> target, List<T> tool) {
        List<T> A = new ArrayList<>(target);
        List<T> B = new ArrayList<>(tool);
        A.removeAll(B);
        return A;
    }

    public static String getMd5(List<Object> valuesList) {
        String[] strings = new String[valuesList.size()];
        for (int i = 0; i < valuesList.size(); i++) {
            strings[i] = valuesList.get(i) == null ? "null" : valuesList.get(i).toString();
        }
        return getMd5(strings);
    }

    public static String getMd5(String[] valuesArray) {
//        Arrays.sort(valuesArray);
        StringBuilder stringBuilder = new StringBuilder();
        for (Object value : valuesArray) {
            stringBuilder.append("&&").append(value);
        }
        return DigestUtils.md5Hex(stringBuilder.toString());
    }

}
